home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 May: Tool Chest / Developer CD Series Tool Chest (Apple Computer)(May 1999).iso / Tool Chest / Development Kits / HyperCard Related / XCMDs & XFCNs / Byrne's XCMDs&XFCNs / Source / ColonToComma.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-01  |  3.3 KB  |  147 lines  |  [TEXT/MPS ]

  1. /*
  2.     ColonToComma XFCN v1.2
  3.     
  4.     ©1991 Apple Computer, Inc.; by Mike Byrne
  5.     
  6.     Takes a string of the form "mm:ss" or "mm:ss:bb" and converts it to "mm,ss,00" or "mm,ss,bb".
  7.     
  8.     Form:
  9.     ColonToComma(<string>)
  10.     
  11.     # the MPW 3.2 build commands:
  12.     C -b ColonToComma.c -mbg off
  13.         Link -w -t STAK -c WILD -rt XFCN=700 ∂
  14.             -m ENTRYPOINT ∂
  15.             -sg ColonToComma ∂
  16.             ColonToComma.c.o ∂
  17.             "{Libraries}HyperXLib.o" ∂
  18.             "{Libraries}Runtime.o" ∂
  19.             "{Libraries}Interface.o" ∂
  20.             "{CLibraries}StdCLib.o" ∂
  21.             -o "teststack"
  22. */
  23.  
  24. #include <Types.h>
  25. #include <string.h>
  26. #include <Memory.h>
  27. #include "HyperXCmd.h"
  28.  
  29. #define NULL (long) 0
  30. #define NIL (long) 0
  31.  
  32. #define kNumParams 1
  33.  
  34.  
  35. /* prototypes */
  36. void ErrorBack(XCmdPtr paramPtr, char *message);
  37. void MoveLockParams ( XCmdPtr paramPtr, short paramCount );
  38. void UnlockParams  ( XCmdPtr paramPtr, short paramCount );
  39.  
  40.  
  41.  
  42. pascal void EntryPoint(XCmdPtr paramPtr)
  43. {
  44.  
  45.     /* variable declarations */
  46.     char    newString[50];
  47.     short    length;
  48.     short    replacements = 0;
  49.     short    i = 0;
  50.  
  51.     /* move high and lock the parameters. */
  52.     MoveLockParams(paramPtr, paramPtr->paramCount);
  53.  
  54.     /* check for copyright or syntax help request */
  55.     if (!strcmp( (char*)*paramPtr->params[0], "!") ) {
  56.         ErrorBack(paramPtr, "v1.2, ©1991 Apple Computer, Inc.; by Mike Byrne");
  57.         UnlockParams(paramPtr, paramPtr->paramCount);
  58.         return;
  59.     } else if (!strcmp ( (char*)*paramPtr->params[0], "?") ) {
  60.         ErrorBack(paramPtr, "ColonToComma syntax is 'ColonToComma(<string>)'");
  61.         UnlockParams(paramPtr, paramPtr->paramCount);
  62.         return;
  63.     }
  64.  
  65.     /* not a copyright or help request.       */     
  66.     /* check for correct number of parameters */
  67.     if (paramPtr->paramCount != kNumParams) {
  68.         ErrorBack(paramPtr, "Error: ColonToComma syntax is 'ColonToComma(<string>)'");
  69.         UnlockParams(paramPtr, paramPtr->paramCount);
  70.         return;
  71.     }
  72.  
  73.     /* copy the parameter to orgString */
  74.     strcpy(newString, (char*)*paramPtr->params[0]);
  75.     length = strlen(newString);
  76.     
  77.     /* loop through, replacing colons with commas */
  78.     for ( i = 0 ; i < 10 && i < length; i++) {
  79.         if (newString[i] == ':') {
  80.             newString[i] = ',';
  81.             replacements++;
  82.         } 
  83.     }
  84.     
  85.     /* now, if only one replacement was made, we should add zeros. */
  86.     if (replacements == 1) {
  87.         strcat(newString, ",00");
  88.     }
  89.     
  90.     
  91.     /* we're outta here */
  92.     ErrorBack(paramPtr, newString);
  93.     UnlockParams(paramPtr, paramPtr->paramCount);
  94.     return;
  95.  
  96.  
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.     
  104. /* allocate and load up paramPtr->returnValue with a string 
  105.    -------------------------------------------------------- */
  106. void ErrorBack(XCmdPtr paramPtr, char *message)
  107. {
  108.     Handle  mesHnd;
  109.  
  110.     /*
  111.         Allocate space for an error message.
  112.         Copy the string into it.
  113.         Return the handle to HyperCard.
  114.     */
  115.     mesHnd = NewHandle((long)(strlen(message)+1));
  116.     if (mesHnd == nil) return;
  117.     strcpy((char *)*mesHnd,message);
  118.     paramPtr->returnValue = mesHnd;
  119. }
  120.  
  121.  
  122.  
  123. /*  move high and lock down all parameters  
  124.     ----------------------------------------------------------------------- */
  125. void MoveLockParams ( XCmdPtr paramPtr, short paramCount )
  126. {
  127.     short i;
  128.     
  129.     for(i=0; i <= paramCount-1; i++)
  130.     {
  131.         MoveHHi(paramPtr->params[i]);
  132.         HLock(paramPtr->params[i]);
  133.     }
  134. }
  135.  
  136.  
  137.  
  138.  
  139. /* unlock all parameter handles in the XCmdBlock  
  140.    ---------------------------------------------  */
  141. void UnlockParams  ( XCmdPtr paramPtr, short paramCount )
  142. {    short i;
  143.     
  144.     for(i=0; i <= paramCount-1; i++)
  145.         { HUnlock(paramPtr->params[i]);}
  146. }
  147.